<!doctype html>
<!--
  Copyright 2012-2019 the original author or authors.

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Glowroot</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">

  <!-- this base href tag is replaced with server-side dynamic base href tag plus layout json object
       (see IndexHtmlService.java) -->
  <base href="/">

  <!-- this is needed when base href is not / -->
  <link rel="shortcut icon" href="favicon.ico">

  <!-- build:css({.tmp,.}) styles/main.css -->
  <link rel="stylesheet" href="styles/main.css">
  <link rel="stylesheet" href="bower_components/angular-ui-bootstrap4/src/typeahead/typeahead.css">
  <link rel="stylesheet" href="bower_components/angular-ui-bootstrap4/src/tooltip/tooltip.css">
  <link rel="stylesheet" href="bower_components/bootstrap-multiselect/dist/css/bootstrap-multiselect.css">
  <link rel="stylesheet" href="bower_components/d3-flame-graph/dist/d3-flamegraph.css">
  <link rel="stylesheet" href="bower_components/codemirror/lib/codemirror.css">
  <!-- endbuild -->

  <script>
    if (document.fonts) {
      new FontFace('Open Sans',
          'url(fonts/opensans-regular.woff2) format("woff2"),' +
          ' url(fonts/opensans-regular.woff) format("woff")',
          {weight: '400'}).load();
      new FontFace('Open Sans',
          'url(fonts/opensans-semibold.woff2) format("woff2"),' +
          ' url(fonts/opensans-semibold.woff) format("woff")',
          {weight: '600'}).load();
      new FontFace('Open Sans',
          'url(fonts/opensans-bold.woff2) format("woff2"),' +
          ' url(fonts/opensans-bold.woff) format("woff")',
          {weight: '700'}).load();
      new FontFace('Font Awesome Free',
          'url(fonts/fa-regular-400.woff2) format("woff2"),' +
          ' url(fonts/fa-regular-400.woff) format("woff")',
          {weight: '400'}).load();
      new FontFace('Font Awesome Free',
          'url(fonts/fa-solid-900.woff2) format("woff2"),' +
          ' url(fonts/fa-solid-900.woff) format("woff")',
          {weight: '900'}).load();
      new FontFace('Cousine',
          'url(fonts/cousine-regular.woff2) format("woff2"),' +
          ' url(fonts/cousine-regular.woff) format("woff")',
          {weight: '400'}).load();
    }
  </script>
</head>
<body ng-app="glowroot"
      ng-class="{'footer-tall': layout.central && isViewingAgent()}"
      id="ng-app">
<!--[if lt IE 10]>
<style>
  body div {
    display: none;
  }
</style>
<p style="text-align: center; padding-top: 50px; font-size: 1.25rem;">
  Glowroot UI does not support IE9 or prior
</p>
<![endif]-->
<!-- the outer div is needed to fix IE11 flex bug, see https://github.com/philipwalton/flexbugs#flexbug-3 -->
<div style="display: flex; flex-direction: column;">
  <nav class="navbar navbar-expand-md navbar-dark gt-navbar py-0 align-items-stretch">
    <div class="container align-items-stretch">
      <div class="navbar-brand align-items-center"
           style="margin-right: 1.25rem; margin-top: -0.25rem;">
        Glowroot
      </div>
      <button class="gt-navbar-toggler d-flex d-md-none"
              type="button"
              ng-if="!hideNavbar()"
              data-toggle="collapse"
              data-target="#navbarCollapse"
              aria-controls="navbarCollapse"
              aria-expanded="false"
              aria-label="Toggle navigation">
        <div class="navbar-toggler">
          <span class="navbar-toggler-icon"></span>
        </div>
      </button>
      <div class="collapse navbar-collapse ng-cloak align-items-stretch"
           ng-hide="hideNavbar()"
           ng-controller="NavbarCtrl"
           id="navbarCollapse">
        <ul class="navbar-nav mr-auto align-items-stretch">
          <div gt-navbar-item
               gt-display="Transactions"
               gt-item-name="transaction"
               gt-url="transaction/average{{queryString(true, true)}}"
               gt-click="collapseIfNeeded()"
               ng-if="layout.showNavbarTransaction">
          </div>
          <div gt-navbar-item
               gt-display="Errors"
               gt-item-name="error"
               gt-url="error/messages{{queryString(true, true)}}"
               gt-click="collapseIfNeeded()"
               ng-if="layout.showNavbarError">
          </div>
          <div gt-navbar-item
               gt-display="JVM"
               gt-item-name="jvm"
               gt-url="jvm/gauges{{queryString(true, false, true)}}"
               gt-click="collapseIfNeeded()"
               ng-if="layout.showNavbarJvm">
          </div>
          <div gt-navbar-item
               gt-display="Synthetic"
               gt-item-name="syntheticMonitor"
               gt-url="synthetic-monitors{{queryString(true)}}"
               gt-click="collapseIfNeeded()"
               ng-if="layout.central && layout.showNavbarSyntheticMonitor">
          </div>
          <div gt-navbar-item
               gt-display="Incidents"
               gt-item-name="incident"
               gt-url="incidents"
               gt-click="collapseIfNeeded()"
               ng-if="layout.showNavbarIncident">
          </div>
          <div gt-navbar-item
               gt-display="Reporting"
               gt-item-name="report"
               gt-url="report/ad-hoc{{reportQueryString()}}"
               gt-click="collapseIfNeeded()"
               ng-if="layout.showNavbarReport">
          </div>
        </ul>
        <ul class="nav navbar-nav navbar-right align-items-stretch">
          <li class="dropdown ng-cloak gt-gears-li"
              ng-class="{active: activeNavbarItem === 'gears'}"
              ng-if="layout.showNavbarConfig || layout.adminView || !layout.loggedIn && layout.loginEnabled || layout.loggedIn && !layout.ldap">
            <!-- id is used by webdriver tests -->
            <button class="gt-gears-btn"
                    type="button"
                    data-toggle="dropdown"
                    id="gtGearsMenuToggle"
                    aria-label="Settings"
                    aria-haspopup="true"
                    aria-expanded="false"
                    style="font-size: 1.5rem;">
              <span class="fas fa-cogs"></span>
            </button>
            <!-- id is used by webdriver tests -->
            <div class="dropdown-menu dropdown-menu-right gt-gears-menu mt-0"
                 id="gtGearsMenu">
              <a class="dropdown-item"
                 ng-href="{{configUrl()}}"
                 ng-click="collapseIfNeeded()"
                 ng-if="layout.showNavbarConfig"
                 style="padding-top: 5px; padding-bottom: 5px;">
                Configuration
              </a>
              <a class="dropdown-item"
                 href="admin/general"
                 ng-click="collapseIfNeeded()"
                 ng-if="layout.adminView"
                 style="padding-top: 5px; padding-bottom: 5px;">
                Administration
              </a>
              <a class="dropdown-item"
                 href="login"
                 ng-click="collapseIfNeeded(); goToLogin($event)"
                 ng-if="!layout.loggedIn && layout.loginEnabled"
                 style="padding-top: 5px; padding-bottom: 5px;">
                Login
              </a>
              <a class="dropdown-item"
                 ng-href="profile/change-password"
                 ng-click="collapseIfNeeded()"
                 ng-if="layout.loggedIn && !layout.ldap"
                 style="padding-top: 5px; padding-bottom: 5px;">
                Change my password
              </a>
            </div>
          </li>
          <li class="ng-cloak" ng-if="layout.loggedIn">
            <button class="gt-gears-btn"
                    type="button"
                    ng-click="signOut()"
                    style="font-size: 1.5rem;">
              <span title="Sign out" class="fas fa-sign-out-alt"></span>
            </button>
          </li>
        </ul>
      </div>
    </div>
  </nav>
</div>
<main class="container"
      role="main"
      id="container">
  <div class="ng-cloak gt-button-message-success"
       ng-if="displaySignOutMessage"
       style="text-align: center; font-size: 1.25rem; font-weight: 600; height: 0;">
    You have been signed out
  </div>
  <div class="ng-cloak gt-button-message-error"
       ng-if="navbarErrorMessage"
       style="text-align: center; font-size: 1.25rem; font-weight: 600; height: 0;">
    {{navbarErrorMessage}}
  </div>
  <div ui-view></div>
  <!-- modals need to be outside other content so that aria-hidden="true" can be applied to all other content when a
   modal is visible (see modals.js), but modals still need to be inside of the "main" region -->
  <div id="modalContent"></div>
</main>
<footer class="ng-cloak"
        ng-class="{'footer-tall': layout.central && isViewingAgent()}"
        role="contentinfo"
        id="footer">
  <div ng-if="!layout.central">Glowroot version {{layout.glowrootVersion}}</div>
  <div ng-if="layout.central">Central collector version {{layout.glowrootVersion}}</div>
  <div ng-if="layout.central && isViewingAgent()">Agent version {{agentRollup.glowrootVersion}}</div>
</footer>
<div class="gt-monospace gt-offscreen" id="offscreenText">x</div>

<!-- build:js({.tmp,.}) scripts/vendor.js -->
<script src="bower_components/jquery/dist/jquery.js"></script>
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/angular-ui-router/release/angular-ui-router.js"></script>
<script src="bower_components/handlebars/handlebars.runtime.js"></script>
<script src="bower_components/bootstrap/js/dist/util.js"></script>
<!-- bootstrap modal is much better than angular-ui-modal
     in particular around dealing with vertical scrollbar to prevent background jitter -->
<script src="bower_components/bootstrap/js/dist/modal.js"></script>
<!-- collapse is needed for the navbar on small screen (mobile) -->
<script src="bower_components/bootstrap/js/dist/collapse.js"></script>
<!-- popper is needed by dropdown -->
<script src="bower_components/popper.js/dist/umd/popper.js"></script>
<!-- dropdown is needed for bootstrap-select (used by transaction sidebar) -->
<script src="bower_components/bootstrap/js/dist/dropdown.js"></script>
<!-- tooltip is used by copy to clipboard -->
<script src="bower_components/bootstrap/js/dist/tooltip.js"></script>
<!-- typeahead is used by instrumentation view -->
<script src="bower_components/angular-ui-bootstrap4/src/typeahead/typeahead.js"></script>
<!-- position is needed by typeahead -->
<script src="bower_components/angular-ui-bootstrap4/src/position/position.js"></script>
<!-- debounce is needed by typeahead -->
<script src="bower_components/angular-ui-bootstrap4/src/debounce/debounce.js"></script>
<!-- popover is used for chart help -->
<script src="bower_components/angular-ui-bootstrap4/src/popover/popover.js"></script>
<!-- tooltip is needed by popover -->
<script src="bower_components/angular-ui-bootstrap4/src/tooltip/tooltip.js"></script>
<!-- stackedMap is needed by tooltip -->
<script src="bower_components/angular-ui-bootstrap4/src/stackedMap/stackedMap.js"></script>
<script src="bower_components/moment/moment.js"></script>
<script src="bower_components/moment-timezone/builds/moment-timezone-with-data.js"></script>
<script src="bower_components/tempusdominus/build/js/tempusdominus-bootstrap-4.js"></script>
<script src="bower_components/bootstrap-select/js/bootstrap-select.js"></script>
<script src="bower_components/bootstrap-multiselect/dist/js/bootstrap-multiselect.js"></script>
<script src="bower_components/flot/src/jquery.flot.js"></script>
<script src="bower_components/flot/lib/jquery.colorhelpers.js"></script>
<script src="bower_components/flot/lib/jquery.mousewheel.js"></script>
<script src="bower_components/flot/src/plugins/jquery.flot.navigate.js"></script>
<script src="bower_components/flot/src/plugins/jquery.flot.selection.js"></script>
<script src="bower_components/flot/src/plugins/jquery.flot.time.js"></script>
<script src="bower_components/flot/src/plugins/jquery.flot.stack.js"></script>
<script src="bower_components/flot.tooltip/js/jquery.flot.tooltip.js"></script>
<script src="bower_components/sequeljs/web/js/parser/SqlParser.js"></script>
<script src="bower_components/sequeljs/web/js/parser/SqlPrettyPrinter.js"></script>
<script src="bower_components/spinjs/spin.js"></script>
<script src="bower_components/clipboard/dist/clipboard.js"></script>
<script src="bower_components/codemirror/lib/codemirror.js"></script>
<script src="bower_components/codemirror/mode/clike/clike.js"></script>
<script src="bower_components/codemirror/addon/edit/matchbrackets.js"></script>
<script src="bower_components/angular-ui-codemirror/ui-codemirror.js"></script>
<!-- angular-ui-bootstrap4-templates.js is generated at build time by grunt-angular-templates -->
<script src="scripts/generated/angular-ui-bootstrap4-templates.js"></script>
<script src="bower_components/focus-visible/src/focus-visible.js"></script>
<!-- endbuild -->

<!-- build:js({.tmp,app}) scripts/scripts.js -->
<script src="scripts/app.js"></script>
<script src="scripts/routes.js"></script>
<script src="scripts/directives.js"></script>
<script src="scripts/filters.js"></script>
<script src="scripts/handlebars-rendering.js"></script>
<script src="scripts/clipboard.js"></script>
<script src="scripts/parser.js"></script>
<script src="scripts/services/modals.js"></script>
<script src="scripts/services/trace-modal.js"></script>
<script src="scripts/services/encryption-key-message.js"></script>
<script src="scripts/services/confirm-if-has-changes.js"></script>
<script src="scripts/services/location-changes.js"></script>
<script src="scripts/services/http-errors.js"></script>
<script src="scripts/services/login.js"></script>
<script src="scripts/services/charts.js"></script>
<script src="scripts/services/keyed-color-pools.js"></script>
<script src="scripts/services/query-strings.js"></script>
<script src="scripts/services/conversions.js"></script>
<script src="scripts/services/instrumentation-export.js"></script>
<script src="scripts/controllers/navbar.js"></script>
<script src="scripts/controllers/chart-range.js"></script>
<script src="scripts/controllers/transaction.js"></script>
<script src="scripts/controllers/transaction/sidebar.js"></script>
<script src="scripts/controllers/transaction/tabs.js"></script>
<script src="scripts/controllers/transaction/average.js"></script>
<script src="scripts/controllers/transaction/percentiles.js"></script>
<script src="scripts/controllers/transaction/throughput.js"></script>
<script src="scripts/controllers/transaction/traces.js"></script>
<script src="scripts/controllers/transaction/queries.js"></script>
<script src="scripts/controllers/transaction/service-calls.js"></script>
<script src="scripts/controllers/transaction/thread-profile.js"></script>
<script src="scripts/controllers/transaction/flame-graph.js"></script>
<script src="scripts/controllers/transaction/trace-flame-graph.js"></script>
<script src="scripts/controllers/transaction/error-messages.js"></script>
<script src="scripts/controllers/jvm.js"></script>
<script src="scripts/controllers/jvm/gauge-values.js"></script>
<script src="scripts/controllers/jvm/thread-dump.js"></script>
<script src="scripts/controllers/jvm/jstack.js"></script>
<script src="scripts/controllers/jvm/heap-dump.js"></script>
<script src="scripts/controllers/jvm/heap-histogram.js"></script>
<script src="scripts/controllers/jvm/force-gc.js"></script>
<script src="scripts/controllers/jvm/mbean-tree.js"></script>
<script src="scripts/controllers/jvm/system-properties.js"></script>
<script src="scripts/controllers/jvm/environment.js"></script>
<script src="scripts/controllers/jvm/capabilities.js"></script>
<script src="scripts/controllers/synthetic-monitors.js"></script>
<script src="scripts/controllers/incidents.js"></script>
<script src="scripts/controllers/report.js"></script>
<script src="scripts/controllers/report/adhoc.js"></script>
<script src="scripts/controllers/config.js"></script>
<script src="scripts/controllers/config/general.js"></script>
<script src="scripts/controllers/config/transaction.js"></script>
<script src="scripts/controllers/config/gauge-list.js"></script>
<script src="scripts/controllers/config/gauge.js"></script>
<script src="scripts/controllers/config/jvm.js"></script>
<script src="scripts/controllers/config/synthetic-monitor-list.js"></script>
<script src="scripts/controllers/config/synthetic-monitor.js"></script>
<script src="scripts/controllers/config/alert-list.js"></script>
<script src="scripts/controllers/config/alert.js"></script>
<script src="scripts/controllers/config/ui-defaults.js"></script>
<script src="scripts/controllers/config/plugin-list.js"></script>
<script src="scripts/controllers/config/plugin.js"></script>
<script src="scripts/controllers/config/instrumentation-list.js"></script>
<script src="scripts/controllers/config/instrumentation.js"></script>
<script src="scripts/controllers/config/advanced.js"></script>
<script src="scripts/controllers/config/json.js"></script>
<script src="scripts/controllers/admin.js"></script>
<script src="scripts/controllers/admin/general.js"></script>
<script src="scripts/controllers/admin/user-list.js"></script>
<script src="scripts/controllers/admin/user.js"></script>
<script src="scripts/controllers/admin/role-list.js"></script>
<script src="scripts/controllers/admin/role.js"></script>
<script src="scripts/controllers/admin/web.js"></script>
<script src="scripts/controllers/admin/storage.js"></script>
<script src="scripts/controllers/admin/smtp.js"></script>
<script src="scripts/controllers/admin/http-proxy.js"></script>
<script src="scripts/controllers/admin/integration/ldap.js"></script>
<script src="scripts/controllers/admin/integration/pager-duty.js"></script>
<script src="scripts/controllers/admin/integration/slack.js"></script>
<script src="scripts/controllers/admin/integration/healthchecks-io.js"></script>
<script src="scripts/controllers/admin/json.js"></script>
<script src="scripts/controllers/profile.js"></script>
<script src="scripts/controllers/profile/change-password.js"></script>
<script src="scripts/controllers/login.js"></script>
<!-- handlebars-templates.js is generated at build time by grunt-contrib-handlebars -->
<script src="scripts/generated/handlebars-templates.js"></script>
<!-- angular-templates.js is generated at build time by grunt-angular-templates -->
<script src="scripts/generated/angular-templates.js"></script>
<!-- endbuild -->

<!-- build:js(.) scripts/vendor-flame-graph.js -->
<!-- large d3.js is loaded async since only needed on flame graph page
     (but can't mark these all async which then causes failures under grunt serve since d3-flame-graph
     can be loaded before d3, see grunt-usemin issue #391, and workaround in Grunfile.js)
     also, the angular route for the flame graph page waits for window.d3 to be present (see routes.js) -->
<script src="bower_components/d3/d3.js"></script>
<!-- the non-minified d3-flamegraph uses ES6 "const", which then causes problems for grunt uglify -->
<script src="bower_components/d3-flame-graph/dist/d3-flamegraph.min.js"></script>
<!-- endbuild -->
</body>
</html>
